from PIL import Image
import os

def compress_images(input_folder, output_folder, compression_scale):
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 获取输入文件夹中所有图片文件的列表
    image_files = [f for f in os.listdir(input_folder) if os.path.isfile(os.path.join(input_folder, f)) and f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif'))]

    for image_file in image_files:
        input_path = os.path.join(input_folder, image_file)
        output_path = os.path.join(output_folder, image_file)

        # 打开图片文件
        img = Image.open(input_path)

        # 计算压缩后的尺寸
        width, height = img.size
        new_width = int(width / compression_scale)
        new_height = int(height / compression_scale)

        # 使用ANTIALIAS滤波器进行图片缩放
        img = img.resize((new_width, new_height), Image.ANTIALIAS)

        # 保存压缩后的图片
        img.save(output_path)

        print(f"压缩图片 '{image_file}' 完成")

# 定义输入和输出文件夹路径以及压缩比例（以原图片尺寸的倒数表示）
input_folder = "D:\yolov5\data\images"
output_folder = "D:\yolov5\data\OUT"
compression_scale = 2  # 例如，2 表示压缩为原图片尺寸的 1/2

# 调用函数进行压缩
compress_images(input_folder, output_folder, compression_scale)
